home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / DCLAP 6d / dclap6d / Drtf / DRichViewNu.h < prev    next >
Text File  |  1996-07-05  |  8KB  |  215 lines

  1. // DRichViewNu.h
  2. // d.g.gilbert
  3.  
  4. #ifndef _DRICHVIEWNU_
  5. #define _DRICHVIEWNU_
  6.  
  7. #include "Dvibrant.h"
  8. #include "DView.h"
  9. #include "DFile.h"
  10. #include "DMethods.h"
  11. #include "DPanel.h"
  12. #include "DWindow.h"
  13. #include "DApplication.h"
  14.  
  15. #include "DRichStyle.h"
  16.  
  17. class DList;
  18. class DDialogText;
  19.  
  20. class DRichView : public DPanel, public DPrintHandler, public DSaveHandler
  21. {
  22. public:
  23.     short     fNumLines, fNumItems, fBarmax, fTabCount, fDocFormat;
  24.     Boolean    fAutoAdjust, fIsVirtual, fDodraw;
  25.     DList    *    fStyles; // of DRichStyle
  26.     DList    *    fParags; // of DParagraph
  27.     Nlm_RecT    fDrawr;
  28.     Nlm_PoinT    fAtpt;
  29.     DRichStyle * fCurrentStyle;
  30.         // selection handling;
  31.     Boolean         fSelected, fSelInPict;
  32.     short                fSelParag, fSelChar, fSelEndParag, fSelEndChar;
  33.     Nlm_RecT        fSelRect; // for pict item
  34.     DRichStyle    fSelStyle; // for pict only??
  35.     DRichStyle* fMapStyle;
  36.  
  37.     static void  InitRichView();
  38.  
  39.     DRichView(long id, DView* itsSuperior, short pixwidth, short pixheight, 
  40.                         Boolean hasVscroll = true);
  41.     virtual ~DRichView();
  42.  
  43.     virtual void Draw();
  44.     virtual void Print();
  45.     virtual void Save( DFile* f);
  46.  
  47.     virtual void ViewRect( Nlm_RecT& r);
  48.     virtual char* DataToChar(char* ptr);  
  49.  
  50.     virtual void Append( void* data, short lines, DParagraph* parFormat,  
  51.                         DRichStyle* styles, short nstyles, Boolean docOwnsData = true);
  52.     virtual void Append( char* text, DParagraph* parFormat, 
  53.                         DRichStyle* styles, short nstyles, Nlm_FonT aFont = NULL);
  54.     
  55.     virtual void Replace( short item, void* data, short lines, DParagraph* parFormat,  
  56.                         DRichStyle* styles, short nstyles, Boolean docOwnsData = true);
  57.     virtual void     Replace( short item, char* text, DParagraph* parFormat,  
  58.                         DRichStyle* styles, short nstyles, Nlm_FonT aFont = NULL);
  59.     
  60.     virtual void Insert( short item, void* data, short lines, DParagraph* parFormat, 
  61.                         DRichStyle* styles, short nstyles, Boolean docOwnsData = true);
  62.     virtual void Insert( short item, char* text, DParagraph* parFormat, 
  63.                         DRichStyle* styles, short nstyles, Nlm_FonT aFont = NULL);
  64.                         
  65.     virtual void Delete( short item);
  66.     virtual void DeleteAll();
  67.                         
  68.     virtual void    ShowFile( char* filename, Nlm_FonT font = Nlm_programFont);
  69.     virtual void    ShowFileFancy( char* filename, DParagraph* parFormat, 
  70.                         DRichStyle* styles, short nstyles, short tabStops = 4);
  71.     virtual void ShowDoc( char* doctext, ulong doclength = 0); 
  72.             
  73.     void  SetTabs( short theTabstops);
  74.     virtual char* GetText( short item, short row);
  75.     void     MapPoint( Nlm_PoinT pt, short& item, short& row,  Nlm_RectPtr rct,
  76.                                     char* wordAt, short maxword, DRichStyle* styleAt);
  77.  
  78.     void        GetItemStats( short item, short& startsAt, short& rowCount, short& lineHeight);
  79.     Boolean GetScrollStats( short& offset, short& firstShown, short& firstLine);
  80.     void         SetData(void* data);
  81.     VoidPtr GetData();
  82.     virtual Boolean    IsVisible( short item, short& top, short& bottom, short& firstline);
  83.  
  84.     virtual void SizeToSuperview( DView* super, Boolean horiz, Boolean vert);
  85.     virtual void Resize( DView* superview, Nlm_PoinT sizechange);
  86.     virtual void SetSlateBorder( Boolean turnon);
  87.  
  88.     Boolean HasSelection() { return fSelected; }
  89.     Boolean SelectionIsPict() { return fSelInPict; }
  90.     virtual    void    MarkSelection( Nlm_RecT selrect);
  91.     virtual void     ClearSelection();
  92.     virtual void  HiliteSelection(Boolean turnon);
  93.     virtual Boolean GetSelection( Boolean& inpict,
  94.                             short& selparag, short& selchar, 
  95.                             short& selendparag, short& selendchar,
  96.                             Nlm_RecT& selrect, DRichStyle* selstyle);
  97.     virtual char* GetSelectedText();
  98.     virtual void  SetSelectedText( short startparag, short startchar, 
  99.                                                                  short endparag, short endchar);
  100.     virtual Boolean HiliteText( short startparag, short startchar, 
  101.                                                             short endparag, short endchar, Boolean turnon); 
  102.     virtual void SelectAll();
  103.  
  104.     virtual Boolean Doc2ViewOffset(short& xoff, short& yoff);
  105.     virtual    void MapView2Doc( Nlm_RecT& selr);
  106.     virtual void MapView2Doc( Nlm_PoinT& mpt);
  107.     virtual    Boolean MapDoc2View( Nlm_RecT& selr);
  108.  
  109.     virtual Boolean FindURL( short& atparag, short& atchar, short& atlen,
  110.                                                         short startparag, short startchar); 
  111.     virtual Boolean Find( char* match, short& atparag, short& atchar,
  112.                             short startparag = 0, short startchar = 0, Boolean caseSensitive = false); 
  113.     virtual void InsertStyle( short atparag, short atchar, short atlength, DRichStyle* theStyle);
  114.  
  115.     virtual void Click( Nlm_PoinT mouse);
  116.     virtual void DoubleClick( Nlm_PoinT mouse);
  117.     virtual void SingleClick( Nlm_PoinT mouse);
  118.  
  119.     void    ScrollDoc( Nlm_BaR sb, short newval, short oldval);
  120.     void    ResetDoc();    
  121.     void    Update( short from, short to);
  122.     void    AdjustScroll();
  123.     void    SetAutoAdjust( Boolean autoAdjust);
  124.  
  125.     DParagraph* GetParaPtr( short item); 
  126.  
  127.     virtual void SetStyle( DRichStyle* theStyle);
  128.     DRichStyle* GetStyle( short styleid);
  129.     DRichStyle* GetStyleAtIndex( DParagraph* aParag, short styleindex);
  130.     DRichStyle* GetStyleAtChar( DParagraph* aParag, short atchar);
  131.     DRichStyle* GetStyleAtChar( short atparag, short atchar);
  132.     short FindOrAddStyle( DRichStyle* theStyle);
  133.  
  134.     short GetNumRows( short item);
  135.     short GetLineStart( short item);
  136.     short GetLineHeight( short item);
  137.     short GetItemNum( short desiredLine);
  138.     short UpdateLineStarts( short first);
  139.     void  GetDocStats( short& numParags, short& numLines) ;
  140.     void     ShowTextFile( char* filename, Nlm_FonT font);
  141.     void  UpdateStyleHeight( DRichStyle* theStyle);
  142.  
  143.     short CharWidth(char ch);
  144.  
  145. protected:
  146.     enum handleMode {
  147.         kAppend,
  148.         kInsert,
  149.         kReplace
  150.         };
  151.  
  152.     enum {
  153.         kNoCharWidth = 255
  154.         };
  155.  
  156.     unsigned char fCharWidths[256];
  157.  
  158.     void HandleAddInsRep( handleMode mode, short item, char* text, 
  159.                     DParagraph* parFormat, DRichStyle* styles, short nstyles, Nlm_FonT aFont);
  160.  
  161.     void  ZeroCharWidths();
  162.     short SkipPastNewLine( char* text, short cnt);
  163.     void  AppendParag( DParagraph* aParag);
  164.     DParagraph* MakeNewParag( void* data, short lines, DParagraph* parFormat,  
  165.                     DRichStyle* styles, short nstyles, Boolean docOwnsData);
  166.     void     ClearCurrentStyle();
  167.     virtual short DrawStyledItem( DParagraph* itemPtr, Nlm_RectPtr rpara, short item,
  168.                               short frst, Boolean forPrinter, Nlm_PoinT* mapPoint);
  169.     short StyleLineWidth( char* texts, short maxwid, DParagraph* itemPtr, short& istyle);
  170.     short FitTextToWidth( char* texts, short maxwid, Boolean byPixels,
  171.                               DParagraph* itemPtr, short& istyle);
  172.     void     FormatText( short item, DParagraph* itemPtr, Boolean byPixels);
  173.     void     CollectRange( short item, short& lowest, short& highest);
  174.     void     CacheAndFormat( short item, DParagraph* itemPtr, Nlm_RectPtr r);
  175.     void     CacheIfNever( short item, DParagraph* itemPtr, Nlm_RectPtr r);
  176.     void     FreeCachedItem( short item, short& lowest, short& highest);
  177.     short VisLinesAbove( Nlm_RectPtr r, short item, short line, short& lowest, short& highest);
  178.     short VisLinesBelow( Nlm_RectPtr r, short item, short line, short& lowest, short& highest);
  179.     short PixelsBetween( Nlm_RectPtr r, short firstLine,
  180.                                short lastLine, short& lowest, short& highest);
  181.     void     SaveTableItem( DParagraph* itemPtr, FILE *f, Boolean tabStops);
  182.     void  UpdateItemHeights( DParagraph* aParag);
  183.     void     ParseText(DParagraph* itemPtr, char* text, Boolean byPixels, Nlm_RecT r);
  184. };
  185.  
  186.  
  187. class    DRichTextDoc : public DWindow
  188. {
  189. public:
  190.     static Nlm_RecT gRichDocRect;
  191.     DRichView* fRichView;
  192.     Nlm_FonT    fFont;
  193.     DDialogText * fFloatingEditText;  
  194.  
  195.     DRichTextDoc( long id = 0, Boolean makeRichView = true, Nlm_FonT itsFont = Nlm_programFont);
  196.     virtual void OpenText( char* doctext, ulong doclength = 0);
  197.     virtual void Open( DFile* aFile);
  198.     virtual void Open( char* filename);
  199.     virtual void Open();
  200.     virtual void Close();
  201.     virtual void ResizeWin();
  202.     virtual Boolean IsMyAction(DTaskMaster* action); 
  203. };
  204.  
  205. class DRichApplication : public DApplication
  206. {    
  207. public:
  208.     DRichApplication();
  209.     virtual void OpenDocument(DFile* aFile);
  210. };
  211.  
  212.  
  213.  
  214. #endif
  215.